/*
 * Codé par: Tristan Gosselin
 * Commenté par: Tristan Gosselin
 * **************************
 * Classe de type JFrame
 * Contient l'écran de l'info de la table et ses clients
 */
package logicielrestaurant;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;

public class InscrireCommande extends javax.swing.JFrame implements ActionListener {

    private Table _tableSelect;
    private Serveur _serveur;
    private int _nbreClient = 1;
    List<JButton> buttons = new ArrayList<JButton>();
    
    // Contructeur par défaut
    public InscrireCommande() {
        initComponents();
        // Ajout du dispose on close, pour ne pas que le programme se ferme completement quand on pèse sur X
        addWindowListener(new WindowAdapter() 
        {
            public void windowOpened(WindowEvent e) 
            {
                setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            }
        }); 
    }
    // Contructeur par paramètres
    public InscrireCommande(Table t, Serveur s) {
        initComponents();
        // on met le serveur et la table dans les varibale internes
        _tableSelect = t;
        _serveur = s;
        // Ajout du dispose on close, pour ne pas que le programme se ferme completement quand on pèse sur X
        addWindowListener(new WindowAdapter() 
        {
            public void windowOpened(WindowEvent e) 
            {
                setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            }
        }); 
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        lblServeur = new javax.swing.JLabel();
        cmdAjoutClient = new javax.swing.JButton();
        cmdPayerTable = new javax.swing.JButton();
        lblTable = new javax.swing.JLabel();
        cmdTablePrete = new javax.swing.JButton();
        cmdTableServie = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMaximumSize(new java.awt.Dimension(456, 410));
        setPreferredSize(new java.awt.Dimension(456, 190));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });

        jPanel2.setMaximumSize(new java.awt.Dimension(100, 100));

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 446, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 31, Short.MAX_VALUE)
        );

        lblServeur.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        lblServeur.setText("jLabel1");

        cmdAjoutClient.setText("Ajouter un client");
        cmdAjoutClient.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdAjoutClientActionPerformed(evt);
            }
        });

        cmdPayerTable.setText("Payer la table");
        cmdPayerTable.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdPayerTableActionPerformed(evt);
            }
        });

        lblTable.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        lblTable.setText("jLabel1");

        cmdTablePrete.setText("Table prête");
        cmdTablePrete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdTablePreteActionPerformed(evt);
            }
        });

        cmdTableServie.setText("Table Servie");
        cmdTableServie.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmdTableServieActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblTable)
                    .addComponent(lblServeur)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(cmdAjoutClient)
                        .addGap(10, 10, 10)
                        .addComponent(cmdTableServie)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cmdTablePrete)
                        .addGap(10, 10, 10)
                        .addComponent(cmdPayerTable))
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(11, 11, 11)
                .addComponent(lblTable)
                .addGap(6, 6, 6)
                .addComponent(lblServeur)
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cmdAjoutClient)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(cmdTablePrete)
                        .addComponent(cmdTableServie))
                    .addComponent(cmdPayerTable))
                .addGap(6, 6, 6)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-472)/2, (screenSize.height-190)/2, 472, 190);
    }// </editor-fold>//GEN-END:initComponents

    ///
    /// Action listener sur les boutons des clients
    ///
    public void actionPerformed( ActionEvent e )
    {
           // Appel du formulaire AfficherClient selon sur quel client on a clicker
	   if (e.getSource() == buttons.get(0)) 
           {
            Commande c = DbConnection.getCommande(_tableSelect, 1);
            new AfficherClient(c).setVisible(true);
           }
	   if ( e.getSource() == buttons.get(1) ) 
           {
            Commande c = DbConnection.getCommande(_tableSelect, 2);
            new AfficherClient(c).setVisible(true);
           }
	   if ( e.getSource() == buttons.get(2) ) 
           {
            Commande c = DbConnection.getCommande(_tableSelect, 3);
            new AfficherClient(c).setVisible(true);
           }
	   if ( e.getSource() == buttons.get(3) ) 
           {
            Commande c = DbConnection.getCommande(_tableSelect, 4);
            new AfficherClient(c).setVisible(true);
           }
    }
    
    ///
    /// Événement click du bouton ajouter client
    ///
    private void cmdAjoutClientActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdAjoutClientActionPerformed
        // Vérificartion qu'on a pas atteint la limite de 4 clients par table
        if (_nbreClient < 5)
        {
            //Ajout d'un bouton à la liste de boutons clients
            buttons.add( new JButton("Client #" + _nbreClient));  
            JButton j = buttons.get(_nbreClient - 1);
            j.addActionListener(this);
            // Ajout du bouton au panneau
            jPanel2.add(j);
            jPanel2.validate();
            jPanel2.repaint();
            //Création d'un nouvelle commande
            Commande c = new Commande();
            c.setTable(_tableSelect);
            c.setNoClient(_nbreClient);
            c.setServeur(_serveur);
            _nbreClient++;
            // Ouverture du formulaire Se sélection des plats pour le client en donnat la comamnde en paramètres
            new SelectionPlats(c).setVisible(true);
            // Met les boutons payer facture et table prete visible
            this.cmdPayerTable.setEnabled(true);
            this.cmdTablePrete.setEnabled(true);
        }
    }//GEN-LAST:event_cmdAjoutClientActionPerformed

    ///
    /// Événement du load du formulaire
    ///
    private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
        // set des boutons a visible false
        this.cmdPayerTable.setEnabled(false);
        this.cmdTablePrete.setEnabled(false);
        this.cmdTableServie.setEnabled(false);
        //Set des textes d'affichage
        this.lblTable.setText("Informations de la table #" + String.valueOf(this._tableSelect.getNumero()));
        this.lblServeur.setText("Serveur: " + String.valueOf(this._serveur.getPrenom()) + " " + String.valueOf(this._serveur.getNom()));
        //Affichage des boutons selon le statut de la table
        jPanel2.setLayout(new GridLayout());
        if (DbConnection.VerifierDispoTable(_tableSelect))
        {
            if (this._tableSelect.getPret() == 1)
            {
                this.cmdTableServie.setEnabled(true);
            }
            else
            {
                this.cmdTablePrete.setEnabled(true);
                this.cmdPayerTable.setEnabled(true);
            } 
            
            // on va chercher la liste des commandes associées à la table
            List<Commande> list = DbConnection.getAllCommandesTable(_tableSelect);
            //Attribuer un bouton a chaque clients
            //Ajouter dans la liste des boutons clients
            for (int i =0; i < list.size();i++)
            {
                buttons.add( new JButton("Client #" + _nbreClient));  
                _nbreClient++;
            }
            //Afficher tous les boutons clients
            for (int i = 0 ; i < buttons.size(); i++)
            {
                JButton j = buttons.get(i);
                j.addActionListener(this);
                jPanel2.add(j);
                jPanel2.validate();
                jPanel2.repaint();
            }
            // Si on a déjà 4 client on disable le bouton Client
            if (_nbreClient > 4)
                this.cmdAjoutClient.setEnabled(false);
        }
    }//GEN-LAST:event_formWindowOpened

    ///
    /// Événement du click du bbouton payer table
    ///
    private void cmdPayerTableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdPayerTableActionPerformed
        // get de la liste de toutes les commandes associées à la table
        List<Commande> listAllCommandesTable = DbConnection.getAllCommandesTable(_tableSelect);
        // Demande du nombre de factures désirées
        int choix = JOptionPane.showConfirmDialog(this, "Voulez-vous une facture pour toute la table?\nSi vous sélectionnez non, une facture sera créée pour chaque clients.", "Confirmation", JOptionPane.YES_NO_OPTION);  
        // Si on veut une facture par client
        if (choix == JOptionPane.NO_OPTION)
        {
            // Pour chaque commandes
            for (int i = 0; i<listAllCommandesTable.size();i++)
            {
                // On récupère la commande
                List<Commande> l = new ArrayList<Commande>();
                l.add(listAllCommandesTable.get(i));
                // Ouverture du formulaire facture avec la commande
                new Formfacture(l).setVisible(true);
            }
        }
        // Si on veut une facture pour toute la table
        if (choix == JOptionPane.YES_OPTION)
        {
            // Ouverture du formulaire facture avec toutes les commandes
            new Formfacture(listAllCommandesTable).setVisible(true);
        }
        this.dispose();
    }//GEN-LAST:event_cmdPayerTableActionPerformed

    ///
    /// Événement click du bouton Table prete
    ///
    private void cmdTablePreteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdTablePreteActionPerformed
        // Set la table a prete et fermeture du formulaire
        _tableSelect.setPret(1);
        DbConnection.UpdateTable(_tableSelect);
        this.dispose();
    }//GEN-LAST:event_cmdTablePreteActionPerformed

    ///
    /// Événement click du bouton Table servie
    ///
    private void cmdTableServieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdTableServieActionPerformed
        // Set la table a servie et fermeture du formulaire
        _tableSelect.setPret(0);
        DbConnection.UpdateTable(_tableSelect);
        this.dispose();
    }//GEN-LAST:event_cmdTableServieActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton cmdAjoutClient;
    private javax.swing.JButton cmdPayerTable;
    private javax.swing.JButton cmdTablePrete;
    private javax.swing.JButton cmdTableServie;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JLabel lblServeur;
    private javax.swing.JLabel lblTable;
    // End of variables declaration//GEN-END:variables
}
